package study.JavaBase;

/**
 * date:2025.10.13
 * title:stringBuffer
 * author:fzy
 */
//常规的string，每一次拼接都会出现一个新对象
//stringBuffer和stringBuilder修改本身，不产生新的对象
//stringBuilder不是线程安全的（不可以同步访问）,stringBuilder速度快，建议用
//如果需要线程安全，则必须用stringbuffer
public class Java_11 {
    public static void main(String[] args) {
        StringBuildertest.concatTest(new int[]{1, 2, 3, 4, 6});
    }
}


class stringBufferClass {
    static void stringBufferBuilder() {
        StringBuilder stringBuilder1 = new StringBuilder("myFirstStringBuilderSting");
        StringBuffer stringBuffer2 = new StringBuffer("myFirstStringBufferSting");
        stringBuffer2.append("string");
        stringBuilder1.delete(1, 2);
    }
}

//案例
//字符串拼接
//q：a为引用类型为什么可以参加字符串运算
//a(豆包ai):核心答案：Java 的 “语法糖”（编译器优化）让你误以为是 “引用在拼接”，实际是 “引用指向的字符串内容在参与运算”。
//这里设计到装箱
class StringBuildertest {

    static void concatTest(int[] param) {
        String a = new String("[");
        for (int i =0;i<param.length;i++){
            if (i == param.length - 1) {
                a = a.concat(param[i] + "]");
            }else {
                a = a.concat(param[i] + ",");
            }
        }
        System.out.println(a);
    }
    static void concatTestPlus(int[] param){
        StringBuilder a = new StringBuilder("[");
        for (int i =0;i<param.length;i++){
            if (i == param.length - 1) {
                a = a.append(param[i] + "]");
            }else {
                a = a.append(param[i] + ",");
            }
        }
        System.out.println(a);
    }
}
/*
数组字面量{1,2,3,4,5}的使用场景有限制—— 它不能直接作为方法实参传递，必须满足
 “编译器能明确推断数组类型” 的条件。下面用通俗的逻辑拆解原因和解决办法：
 */
